// json - 是什么数据类型 - 数据结构-通常是以字符串形式保存的！
// 数据库 存的就是字符串！
// let str = JSON.parse(`{"name":12,"age":8}`) ;
// console.log(str.name);

// 1. 安装express-session
// 2. 导入express-session模块
const session = require('express-session');
// 3. 导入express模块
const express = require('express');
// 4. 创建express对象
const app = express();
// 5. 调用并配置session中间件
app.use(session({
    // 5.1 参数："name" = 设置cookie的name，默认值是：connect.sid
    // 5.2 参数："secret" = 参与加密的字符串（又称签名）
    // 5.3 参数："saveUninitialized" = 是否为每次请求都设置一个cookie用来存储
    // 5.3 参数："resave" = 强制保存 session 即使它并没有变化,。默认为 true。建议设置成 false
    // 5.4 参数："cookie" = 存储到cookie的相关配置
        // 5.4.1 参数："httpOnly" 开启后,前端无法通过 JS 操作
        // 5.4.2 参数："maxAge"  控制 sessionID 的过期时间
    name:"sID",
    secret:"jintiannichilema",
    saveUninitialized:false,
    resave:false,
    cookie:{
        httpOnly:true,
        maxAge:1000*60
    }
}))
   
// 6 配置get路由 - 设置session - 提交登录信息
app.get('/setSession',(req,res)=>{
    // 6.1 将数据存入session的自定义属性内 - req.session.name = value
    req.session.name = "laowang";
    req.session.pwd = "123";
    // 6.2 返回响应
    res.send('设置成功');
})
   
// 7 配置get路由 - 进入个人中心页
app.get('/getSession',(req,res)=>{
     // 7.1 判断验证session - req.session.name 是否存在
    // 获取session的值
    // console.log(req.session);

    let {name,pwd} = req.session;
     // Session {
    //     cookie: {
    //       path: '/',
    //       _expires: 2022-12-06T01:23:17.844Z,
    //       originalMaxAge: 60000,
    //       httpOnly: true
    //     },
    //     name: 'laowang',
    //     pwd: '123'
    //   }
    // 7.2.1 如果存在session，响应个人中心页内容 
    // 7.2.2 如果不存在session，重定向到登录页
     if(name){
        if(name === "laowang" && pwd === '123'){
                res.send('个人中心');
        }else{
            res.redirect('/login');
        }
     }else{
        res.redirect('/login');
     }
        
    // res.send('获取成功');
})
// login路由
app.get('/login',(req,res)=>{
    res.send('登录页');
})

   
// 8. 配置get路由 - 删除session - 退出登录
app.get('/deleteSession',(req,res)=>{
    // 8.1 判断验证session - req.session.name 是否存在
    // 8.1.1如果存在，删除session - req.destroy(callback)
            // 8.1.1.1 在回调中返回响应
        // 8.1.2 如果不存在，重定向到登录页
    if(req.session.name){
        req.session.destroy(()=>{
            console.log("退出登录成功");
            res.send('退出成功');
        })
    }else{
        res.redirect('/login');
    } 
})

    
// 9 配置get路由 - 登录页面
// 10 监听端口服务
app.listen(80,()=>{
    console.log("启动成功");
})
    